package com.my.behaviourtype.stragety;

import java.util.Comparator;

public class Helper {

	//public static void sort(Object[] objs) {}
	
	// 这样的话,比较策略是写死的,能不能让用户自己定义比较策略呢,用Comparator
	public static void sort(Comparable[] objs) {
		for(int i=objs.length; i>1; i--) {
			for(int j=0; j<i-1; j++) {
				Comparable c1 = objs[j];
				Comparable c2 = objs[j+1];
				if((c1.compareTo(c2)) == 1) {
					swap(objs, j, j+1);
				}
			}
			
		}
	}
	
	// 这个是我自己写的,把比较器交给该静态方法,视频上说的是把比较器交给那个实体类,并可以设置它
	public static void sort(Comparable[] objs, Comparator c) {
		for(int i=objs.length; i>1; i--) {
			for(int j=0; j<i-1; j++) {
				if((c.compare(objs[j], objs[j+1])) == 1) {
					swap(objs, j, j+1);
				}
			}
			
		}
	}
	
	// 见Arrays.sort()
	public static <T> void sort2(T[] objs, Comparator<T> c) {
		for(int i=objs.length; i>1; i--) {
			for(int j=0; j<i-1; j++) {
				if((c.compare(objs[j], objs[j+1])) == 1) {
					swap(objs, j, j+1);
				}
			}
			
		}
	}
	

	// 交换顺序
	private static void swap(Object[] objs, int j, int i) {
		Object temp = objs[j];
		objs[j] = objs[j+1];
		objs[j+1] = temp;
	}

	public static void print(Object[] objs) {
		for(Object o: objs) {
			System.out.println(o);
		}
	}

}
